class Queue {
    constructor () {
        this.items = []
    }

    // 向队列尾部添加一个（或多个）新的项
    enqueue (ele) {
        this.items.push(ele)
    }

    // 移除队列的第一项（即排在队列前面的元素），并返回被移除的元素
    dequeue () {
        return this.items.shift()
    }

    // 只返回队列第一项的元素
    front () {
        return this.items[0]
    }

    isEmpty () {
        return !this.items.length
    }

    size () {
        return this.items.length
    }

    toString () {
        let retStr = ''
        for (let i = 0; i < this.items.length; ++i) {
            retStr += this.items[i] + ' '
        }
        return retStr
    }
}

export default Queue

// 击鼓传花面试题
function whoWin (joiners, num) {
    let s = new Queue()
    for (let i = 0, len = joiners.length; i < len; i++) {
        s.enqueue(joiners[i])
    }
    let j = 1
    while (s.size() > 1) {
        if (j === num) {
            s.dequeue()
            j = 1
        } else {
            s.enqueue(s.dequeue())
            j++
        }
    }
    return s.dequeue()
}

// console.log(whoWin(['Lily', 'Lucy', 'Tom', 'Lilei', 'why'], 3))
